media: Only force GL if we're using a GL renderer
authorMatthias Clasen <mclasen@redhat.com>
Fri, 1 Jan 2021 17:12:35 +0000 (12:12 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 4 Jan 2021 20:01:19 +0000 (15:01 -0500)
When we are not using a GL renderer, getting GL textures
is no advantage to us, so don't make gstreamer send its
frames as GL memory in this case.

modules/media/gtkgstpaintable.c

index fcc5a4f1d242d206c063ef70a3fcd5ca703eb6df..470a5f59e401ad2ab5756293e978b768f2beece9 100644 (file)
 #include "config.h"
 
 #include "gtkgstpaintableprivate.h"
-
 #include "gtkgstsinkprivate.h"
 
+#include <gtk/gtk.h>
 #include <gst/player/gstplayer-video-renderer.h>
+#include <gsk/gl/gskglrenderer.h>
 
 #include <math.h>
 
@@ -122,6 +123,9 @@ gtk_gst_paintable_video_renderer_create_video_sink (GstPlayerVideoRenderer *rend
                        "gl-context", self->context,
                        NULL);
 
+  if (self->context == NULL)
+    return sink;
+
   glsinkbin = gst_element_factory_make ("glsinkbin", NULL);
 
   g_object_set (glsinkbin, "sink", sink, NULL);
@@ -175,10 +179,20 @@ gtk_gst_paintable_realize (GtkGstPaintable *self,
                            GdkSurface      *surface)
 {
   GError *error = NULL;
+  GtkNative *native;
+  GskRenderer *renderer;
 
   if (self->context)
     return;
 
+  native = gtk_native_get_for_surface (surface);
+  renderer = gtk_native_get_renderer (native);
+  if (!GSK_IS_GL_RENDERER (renderer))
+    {
+      GST_INFO ("not using GL with a %s renderer\n", G_OBJECT_TYPE_NAME (renderer));
+      return;
+    }
+
   self->context = gdk_surface_create_gl_context (surface, &error);
   if (self->context == NULL)
     {